package com.xxx.redismq.consumer;

import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import com.xxx.redismq.common.utils.RedisMqUtil;

import javax.annotation.Resource;

import java.text.SimpleDateFormat;
import java.util.List;

/**
 * 消费者task
 */
@Component
public class ConsumerTask {

    @Resource
    private RedisMqUtil redisMQ;

    /**
     * 消费消息
     * 轮询redis的待消费list
     * 每隔2秒执行一次
     */
    @Scheduled(cron="*/2 * * * * *")
    public void consumeMsg() {
        // 消费， 这里是demo，所以只取出来List:1中的待消费队列，因为已知只在List:1存了消息
        List<String> msgs = redisMQ.consume(redisMQ.getRoutes().get(0).getList());
        int len;
        if (null != msgs && 0 < (len = msgs.size())) {
            for (int i = 0; i < len; i++) {
                if (!StringUtils.isEmpty(msgs.get(i))) {
                	// 模拟消息消费，需要再次判断是否到时间了，如果没到时间，需要再次放回zset中
                	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                    System.out.println("消费了消息：" + msgs.get(i)+"，消费的时间：" + sdf.format(System.currentTimeMillis()));
                }
            }
        }
    }
}
